import { nextTick } from 'vue'
import store from '@/store'
import { isString, isArray } from '@/utils/validate'
import settings from '@/settings'

// you can set in settings.js
// errorLog:'production' | ['production', 'development']
const { errorLog: needErrorLog } = settings


export function setupErrorHandler(app) {

  function checkNeed() {
    const env = process.env.NODE_ENV
    if (isString(needErrorLog)) {
      return env === needErrorLog
    }
    if (isArray(needErrorLog)) {
      return needErrorLog.includes(env)
    }
    return false
  }
  
  if(checkNeed()){
    app.config.errorHandler = function(err, vm, info, a) {
      // Don't ask me why I use Vue.nextTick, it just a hack.
      // detail see https://forum.vuejs.org/t/dispatch-in-vue-config-errorhandler-has-some-problem/23500
    nextTick(() => {
        store.dispatch('errorLog/addErrorLog', {
          err,
          vm,
          info,
          url: window.location.href
        })
        console.error(err, info)
      })
    }
  }
}
